//#include<bits/stdc++.h>
//using namespace std;
//int main()
//{
//    int n;
//    cin >> n;
//    vector<vector<int>> vv(n, vector<int>);
//    for(int i = 0; i < n; i++) cin >> vv[i][0];
//    int tmp = n;
//    int t = 1;
//    for(int i = 0; i < n; i++)
//    {
//        for(int j = 0; j < 10; j++)
//        {
//            vv[i].push_back(t);
//            t += tmp;
//        }
//        vv[i][0] --;
//        if(vv[i][0] == 0) tmp--;
//    }
//    return 0;
//}

#include<bits/stdc++.h>
using namespace std;
int flag = 1;
int n;
vector<int> ret;
int nums[1001];
bool dfs(int left, int right)
{
    if(left > right) return true;
    int l = left + 1, r = right;
    if(flag)
    {
        while(r > left && nums[r] >= nums[left]) r--;
        while(l <= right && nums[l] < nums[left]) l++;
    }
    else 
    {
        while(r > left && nums[r] < nums[left]) r--;
        while(l <= right && nums[l] >= nums[left]) l++;
    }
    if(l - r != 1) return false;
    if(dfs(left + 1, r) && dfs(l, right)) ret.push_back(nums[left]);
    return true;
}
int main()
{
    cin >> n;
    for(int i = 0; i < n; i++) cin >> nums[i];
    if(!dfs(0, n - 1))
    {
        flag = 0;
        if(dfs(0, n - 1)) cout << "YES" << endl;
        else cout << "NO" << endl;
    }
    else cout << "YES" << endl;
    if((int)ret.size() == n) 
        for(int i = 0; i < n; i++)
        {
            if(i == 0) cout << ret[i];
            else cout << " " << ret[i];
        }
    return 0;
}
